const express = require("express");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const mysqlStore = require("express-mysql-session")(session);
const app = express();

const getDBConfig = () => ({
  host: "127.0.0.1", // 数据库地址
  port: 3306, // 数据库端口号
  user: "root", // 数据库用户名
  password: "root", // 数据库密码
  database: "test", // 数据库名
  connectionLimit: 1, // 连接池中可以存放的最大连接数量
});
const sessionStore = new mysqlStore(getDBConfig()); //  创建session存储到mysql数据库中

app
  // 配置session
  .use(
    session({
      name: "sid", // 设置 cookie 中保存 session id 的字段名称
      secret: "keyboard cat", // 通过设置 secret 来计算 hash 值并放在 cookie 中，使产生的 signedCookie 防篡改
      saveUninitialized: false, // 是否自动保存未初始化的会话，建议false
      resave: false, // 是否每次都重新保存会话，建议false
      store: sessionStore, // 将session存储到mysql数据库中
      //  cookie的相关设置
      cookie: {
        httpOnly: true, // 开启后前端无法通过 JS 操作cookie
        maxAge: 1000 * 60 * 60, // 设置session的有效时间，单位毫秒
      },
    })
  )
  // 使用 JSON 解析中间件（从 Express 4.16.0 开始）
  .use(express.json())
  // 使用 URL 编码解析中间件（从 Express 4.16.0 开始）
  .use(express.urlencoded({ extended: false }))
  // 使用cookieParser中间件
  .use(cookieParser());
// 创建路由
app.post("/login", (req, res) => {
  const { username, password } = req.body;
  if (username === "zhangsan" && password === "123456") {
    // 登录成功，设置session
    req.session.username = req.body.username;
    res.send("登录成功");
  } else {
    res.send("登录失败");
  }
});
// 获取session
app.get("/", (req, res) => {
  if (req.session.username) {
    res.send("欢迎" + req.session.username + "回来");
  } else {
    res.send("请先登录");
  }
});
// 退出登录
app.get("/logout", (req, res) => {
  // 删除session
  req.session.destroy(() => {
    console.log("session已删除");
  });
  res.send("退出登录成功");
});
app.listen(3000, () => {
  console.log("启动成功");
});
